IPhone H.264 version
On the 7th of March 2008 the BBC launched an iPhone compatible version of their web-based iPlayer service. Visitors to the BBC's iPlayer site using an iPhone would be presented with a slightly tweaked interface, but, crucially, where visitors to the site using a desktop web browser saw an embedded Flash Player using the RTMP protocol, iPhone users would see an embedded Quicktime player streaming H.264 video (referred to by iPlayer as MP4) over a normal HTTP protocol. This is the current method used by download scripts. Overview of video request process Note: As of the 10th December 2010, this process no longer works as the connection to the stream download is negotiated over TLS requiring a client certificate found only in iOS versions 3 and above. This also means older Apple devices not running updated version of iOS are prevented from using the service. The process for requesting the H.264 video is as follows: # Video page is requested and a "BBC-UID" cookie is set, containing the URL-encoded User-Agent string of the browser. # Find the version_PID for the episode from http://www.bbc.co.uk/iplayer/playlist/{PID}. This is found in the form # Request http://www.bbc.co.uk/mediaselector/3/auth/iplayer_streaming_http_mp4/{PID}?{RAND} where {PID} is the programme's version_PID and {RAND} is a random number, although the random number is apparently unused by the service (so in practice the suffix ?{RAND} should be omitted). This URL (and all subsequent requests) must have: ## The Quicktime User-Agent header: "Apple iPhone v1.1.1 CoreMedia v1.0.0.3A110a" ## The BBC-UID cookie ## A "Range" header of "0-1" ## "Accept" header of "*/*" # The video URL then 302 redirects to a much more complex URL. Save that URL. # Then request that URL with "Range" of "bytes=0-1" to get the "Content-Range" header back, containing the full byte length of the video. # Step through the video length, using the "Range" header, from zero (or from the existing size of a partially downloaded file), in steps of under 70MB, until the download is finished, appending to a file with a .mp4 extension. The finished file should be a playable, unencrypted video. Alternative Method Follow the above steps replacing steps 3 and 4 as follows: 3. In your browser's Address line, type http://www.bbc.co.uk/mediaselector/4/mtis/stream/{version PID} where {version PID} (a.k.a. the identifier) is the 8-digit character string in identifier={version PID}. 4. In the XML page that opens, find the section (a.k.a. "media element") containing the attribute service="iplayer_streaming_http_mp4", then find the href attribute of the connection sub-element. This is the URL. For example: Example HTTP headers sent by an iPhone session This is then followed by a redirect response and the client creates another request to the actual media location: Timeline of BBC updates to iPhone interface This seems to have stabilised and the current method of requesting video is at the top of the page. View the page history for this section if you want to see all the fun hoops the BBC made us jump through for a while. Notes Various methods for downloading from iPlayer have been developed, including get_iplayer at http://linuxcentre.net/getiplayer/ which has versions for Windows 95/98/ME/XP, Linux/Unix, and Mac OSX. As of March 10 2010, get_iplayer has been withdrawn and is no longer available on the linuxcentre.net website (http://linuxcentre.net/get_iplayer-dropped-in-response-to-bbcs-lack-of-support-for-open-source). It has been forked here: http://github.com/jjl/get_iplayer and here http://www.infradead.org/get_iplayer/html/get_iplayer.html RTMPdump.exe v2.1d for Windows 95/98/ME/XP remains a viable option for downloading the RTMP stream which the iPlayer uses for streaming its H.264 highest quality feeds (MP4 in an FLV wrapper). See: http://streemeboxvcr.yuku.com/topic/2238/t/Recording-BBC-iPlayer.html RTMP Method Details from Media Selector page - 1. Details that never change: set protocol=rtmp set server=bbcmedia.fcod.llnwd.net set port=1935 set application=a1414/e3 2. Contents of authString (as, av & te never change): set as=adobe-hmac-sha256 set av=1 set te=connect set mp=bbc7/secure_auth/modem/__________.mp4,bbc7/secure_auth/______________.mp4 set et=__________ set fmta-token=_____________________________________________________________ 3. The Playpath (mp4 URL) set identifier=mp4:bbc7/secure_auth/RBN2_bbc7_-_________________________.mp4 rtmpdump --protocol 0 --host %server% -a %application%?as=%as%&av=%av%&te=%te%&mp=%mp%&et=%et%&fmta-token=%fmta-token% -y %identifier% -o output_mp4.flv Notes: 1. Contains only details from the Media Selector page. 2. Must be run from a PIF with Initial Environment of 1024 KB. 3. Suitable only for downloading an RTMP (not HTTP) stream.